/*     */ package com.zimbra.cs.html;
/*     */ 
/*     */ import java.io.PrintStream;
/*     */ import java.util.HashMap;
/*     */ import java.util.Map;
/*     */ import java.util.regex.Matcher;
/*     */ import java.util.regex.Pattern;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public final class HtmlEntityMapper
/*     */ {
/*  31 */   private static final Map<String, Integer> sHtmlEntityToUnicodeMap = new HashMap();
/*  32 */   private static final Map<Integer, String> sUnicodeToHtmlEntityMap = new HashMap();
/*     */   
/*  34 */   private static final Pattern htmlEntityPat = Pattern.compile("&([A-Za-z0-9]{2,6});");
/*  35 */   private static final Pattern numEntityPat = Pattern.compile("&#([0-9]{1,5});");
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String htmlEntitiesToNumeric(String s)
/*     */   {
/*  45 */     String prefix = "&#";
/*  46 */     Pattern regex = htmlEntityPat;
/*  47 */     Map<String, Integer> map = sHtmlEntityToUnicodeMap;
/*     */     
/*  49 */     StringBuilder toRet = new StringBuilder();
/*     */     
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*  67 */     int curIdx = 0;
/*     */     
/*  69 */     Matcher m = regex.matcher(s);
/*     */     
/*  71 */     while (curIdx < s.length()) {
/*  72 */       if (m.find(curIdx)) {
/*  73 */         toRet.append(s.substring(curIdx, m.start()));
/*  74 */         String id = m.group(1);
/*  75 */         if (map.containsKey(id)) {
/*  76 */           toRet.append(prefix).append(map.get(id)).append(";");
/*     */         } else {
/*  78 */           toRet.append(m.group(0));
/*     */         }
/*  80 */         curIdx = m.end();
/*     */       } else {
/*  82 */         toRet.append(s.substring(curIdx));
/*  83 */         curIdx = s.length();
/*     */       }
/*     */     }
/*  86 */     return toRet.toString();
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String numericEntitiesToHtml(String s)
/*     */   {
/*  99 */     String prefix = "&";
/* 100 */     Pattern regex = numEntityPat;
/* 101 */     Map<Integer, String> map = sUnicodeToHtmlEntityMap;
/*     */     
/* 103 */     StringBuilder toRet = new StringBuilder();
/*     */     
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/* 121 */     int curIdx = 0;
/*     */     
/* 123 */     Matcher m = regex.matcher(s);
/*     */     
/* 125 */     while (curIdx < s.length()) {
/* 126 */       if (m.find(curIdx)) {
/* 127 */         toRet.append(s.substring(curIdx, m.start()));
/* 128 */         boolean ok = false;
/*     */         try {
/* 130 */           Integer id = Integer.valueOf(Integer.parseInt(m.group(1)));
/* 131 */           if (map.containsKey(id)) {
/* 132 */             toRet.append(prefix).append((String)map.get(id)).append(";");
/* 133 */             ok = true;
/*     */           }
/*     */         }
/*     */         catch (Exception ex) {}
/* 137 */         if (!ok)
/* 138 */           toRet.append(m.group(0));
/* 139 */         curIdx = m.end();
/*     */       } else {
/* 141 */         toRet.append(s.substring(curIdx));
/* 142 */         curIdx = s.length();
/*     */       }
/*     */     }
/* 145 */     return toRet.toString();
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String unicodeToHtmlEntity(String s)
/*     */   {
/* 156 */     StringBuilder toRet = new StringBuilder();
/* 157 */     for (char c : s.toCharArray()) {
/* 158 */       String rep = (String)sUnicodeToHtmlEntityMap.get(Integer.valueOf(c));
/* 159 */       if (rep != null) {
/* 160 */         toRet.append("&").append(rep).append(";");
/*     */       } else
/* 162 */         toRet.append(c);
/*     */     }
/* 164 */     return toRet.toString();
/*     */   }
/*     */   
/*     */   private static void test(String test1) {
/* 168 */     System.out.println(test1);
/* 169 */     String result = htmlEntitiesToNumeric(test1);
/* 170 */     System.out.println(result);
/* 171 */     String result2 = numericEntitiesToHtml(result);
/* 172 */     System.out.println(result2);
/* 173 */     if (!result2.equals(test1)) {
/* 174 */       System.out.println("Final result NOT EQUAL to initial!\n");
/*     */     } else {
/* 176 */       System.out.println("OK!\n");
/*     */     }
/*     */   }
/*     */   
/*     */   private static void addToMap(String s, Integer code) {
/* 181 */     sHtmlEntityToUnicodeMap.put(s, code);
/* 182 */     sUnicodeToHtmlEntityMap.put(code, s);
/*     */   }
/*     */   
/*     */   static {
/* 186 */     addToMap("OElig", Integer.valueOf(338));
/* 187 */     addToMap("oelig", Integer.valueOf(339));
/* 188 */     addToMap("Scaron", Integer.valueOf(352));
/* 189 */     addToMap("scaron", Integer.valueOf(353));
/* 190 */     addToMap("Yuml", Integer.valueOf(376));
/* 191 */     addToMap("circ", Integer.valueOf(710));
/* 192 */     addToMap("tilde", Integer.valueOf(732));
/* 193 */     addToMap("ensp", Integer.valueOf(8194));
/* 194 */     addToMap("emsp", Integer.valueOf(8195));
/* 195 */     addToMap("thinsp", Integer.valueOf(8201));
/* 196 */     addToMap("zwnj", Integer.valueOf(8204));
/* 197 */     addToMap("zwj", Integer.valueOf(8205));
/* 198 */     addToMap("lrm", Integer.valueOf(8206));
/* 199 */     addToMap("rlm", Integer.valueOf(8207));
/* 200 */     addToMap("ndash", Integer.valueOf(8211));
/* 201 */     addToMap("mdash", Integer.valueOf(8212));
/* 202 */     addToMap("lsquo", Integer.valueOf(8216));
/* 203 */     addToMap("rsquo", Integer.valueOf(8217));
/* 204 */     addToMap("sbquo", Integer.valueOf(8218));
/* 205 */     addToMap("ldquo", Integer.valueOf(8220));
/* 206 */     addToMap("rdquo", Integer.valueOf(8221));
/* 207 */     addToMap("bdquo", Integer.valueOf(8222));
/* 208 */     addToMap("dagger", Integer.valueOf(8224));
/* 209 */     addToMap("Dagger", Integer.valueOf(8225));
/* 210 */     addToMap("permil", Integer.valueOf(8240));
/* 211 */     addToMap("lsaquo", Integer.valueOf(8249));
/* 212 */     addToMap("rsaquo", Integer.valueOf(8250));
/* 213 */     addToMap("euro", Integer.valueOf(8364));
/* 214 */     addToMap("nbsp", Integer.valueOf(160));
/* 215 */     addToMap("iexcl", Integer.valueOf(161));
/* 216 */     addToMap("cent", Integer.valueOf(162));
/* 217 */     addToMap("pound", Integer.valueOf(163));
/* 218 */     addToMap("curren", Integer.valueOf(164));
/* 219 */     addToMap("yen", Integer.valueOf(165));
/* 220 */     addToMap("brvbar", Integer.valueOf(166));
/* 221 */     addToMap("sect", Integer.valueOf(167));
/* 222 */     addToMap("uml", Integer.valueOf(168));
/* 223 */     addToMap("copy", Integer.valueOf(169));
/* 224 */     addToMap("ordf", Integer.valueOf(170));
/* 225 */     addToMap("laquo", Integer.valueOf(171));
/* 226 */     addToMap("not", Integer.valueOf(172));
/* 227 */     addToMap("shy", Integer.valueOf(173));
/* 228 */     addToMap("reg", Integer.valueOf(174));
/* 229 */     addToMap("macr", Integer.valueOf(175));
/* 230 */     addToMap("deg", Integer.valueOf(176));
/* 231 */     addToMap("plusmn", Integer.valueOf(177));
/* 232 */     addToMap("sup2", Integer.valueOf(178));
/* 233 */     addToMap("sup3", Integer.valueOf(179));
/* 234 */     addToMap("acute", Integer.valueOf(180));
/* 235 */     addToMap("micro", Integer.valueOf(181));
/* 236 */     addToMap("para", Integer.valueOf(182));
/* 237 */     addToMap("middot", Integer.valueOf(183));
/* 238 */     addToMap("cedil", Integer.valueOf(184));
/* 239 */     addToMap("sup1", Integer.valueOf(185));
/* 240 */     addToMap("ordm", Integer.valueOf(186));
/* 241 */     addToMap("raquo", Integer.valueOf(187));
/* 242 */     addToMap("frac14", Integer.valueOf(188));
/* 243 */     addToMap("frac12", Integer.valueOf(189));
/* 244 */     addToMap("frac34", Integer.valueOf(190));
/* 245 */     addToMap("iquest", Integer.valueOf(191));
/* 246 */     addToMap("Agrave", Integer.valueOf(192));
/* 247 */     addToMap("Aacute", Integer.valueOf(193));
/* 248 */     addToMap("Acirc", Integer.valueOf(194));
/* 249 */     addToMap("Atilde", Integer.valueOf(195));
/* 250 */     addToMap("Auml", Integer.valueOf(196));
/* 251 */     addToMap("Aring", Integer.valueOf(197));
/* 252 */     addToMap("AElig", Integer.valueOf(198));
/* 253 */     addToMap("Ccedil", Integer.valueOf(199));
/* 254 */     addToMap("Egrave", Integer.valueOf(200));
/* 255 */     addToMap("Eacute", Integer.valueOf(201));
/* 256 */     addToMap("Ecirc", Integer.valueOf(202));
/* 257 */     addToMap("Euml", Integer.valueOf(203));
/* 258 */     addToMap("Igrave", Integer.valueOf(204));
/* 259 */     addToMap("Iacute", Integer.valueOf(205));
/* 260 */     addToMap("Icirc", Integer.valueOf(206));
/* 261 */     addToMap("Iuml", Integer.valueOf(207));
/* 262 */     addToMap("ETH", Integer.valueOf(208));
/* 263 */     addToMap("Ntilde", Integer.valueOf(209));
/* 264 */     addToMap("Ograve", Integer.valueOf(210));
/* 265 */     addToMap("Oacute", Integer.valueOf(211));
/* 266 */     addToMap("Ocirc", Integer.valueOf(212));
/* 267 */     addToMap("Otilde", Integer.valueOf(213));
/* 268 */     addToMap("Ouml", Integer.valueOf(214));
/* 269 */     addToMap("times", Integer.valueOf(215));
/* 270 */     addToMap("Oslash", Integer.valueOf(216));
/* 271 */     addToMap("Ugrave", Integer.valueOf(217));
/* 272 */     addToMap("Uacute", Integer.valueOf(218));
/* 273 */     addToMap("Ucirc", Integer.valueOf(219));
/* 274 */     addToMap("Uuml", Integer.valueOf(220));
/* 275 */     addToMap("Yacute", Integer.valueOf(221));
/* 276 */     addToMap("THORN", Integer.valueOf(222));
/* 277 */     addToMap("szlig", Integer.valueOf(223));
/* 278 */     addToMap("agrave", Integer.valueOf(224));
/* 279 */     addToMap("aacute", Integer.valueOf(225));
/* 280 */     addToMap("acirc", Integer.valueOf(226));
/* 281 */     addToMap("atilde", Integer.valueOf(227));
/* 282 */     addToMap("auml", Integer.valueOf(228));
/* 283 */     addToMap("aring", Integer.valueOf(229));
/* 284 */     addToMap("aelig", Integer.valueOf(230));
/* 285 */     addToMap("ccedil", Integer.valueOf(231));
/* 286 */     addToMap("egrave", Integer.valueOf(232));
/* 287 */     addToMap("eacute", Integer.valueOf(233));
/* 288 */     addToMap("ecirc", Integer.valueOf(234));
/* 289 */     addToMap("euml", Integer.valueOf(235));
/* 290 */     addToMap("igrave", Integer.valueOf(236));
/* 291 */     addToMap("iacute", Integer.valueOf(237));
/* 292 */     addToMap("icirc", Integer.valueOf(238));
/* 293 */     addToMap("iuml", Integer.valueOf(239));
/* 294 */     addToMap("eth", Integer.valueOf(240));
/* 295 */     addToMap("ntilde", Integer.valueOf(241));
/* 296 */     addToMap("ograve", Integer.valueOf(242));
/* 297 */     addToMap("oacute", Integer.valueOf(243));
/* 298 */     addToMap("ocirc", Integer.valueOf(244));
/* 299 */     addToMap("otilde", Integer.valueOf(245));
/* 300 */     addToMap("ouml", Integer.valueOf(246));
/* 301 */     addToMap("divide", Integer.valueOf(247));
/* 302 */     addToMap("oslash", Integer.valueOf(248));
/* 303 */     addToMap("ugrave", Integer.valueOf(249));
/* 304 */     addToMap("uacute", Integer.valueOf(250));
/* 305 */     addToMap("ucirc", Integer.valueOf(251));
/* 306 */     addToMap("uuml", Integer.valueOf(252));
/* 307 */     addToMap("yacute", Integer.valueOf(253));
/* 308 */     addToMap("thorn", Integer.valueOf(254));
/* 309 */     addToMap("yuml", Integer.valueOf(255));
/* 310 */     addToMap("fnof", Integer.valueOf(402));
/* 311 */     addToMap("Alpha", Integer.valueOf(913));
/* 312 */     addToMap("Beta", Integer.valueOf(914));
/* 313 */     addToMap("Gamma", Integer.valueOf(915));
/* 314 */     addToMap("Delta", Integer.valueOf(916));
/* 315 */     addToMap("Epsilon", Integer.valueOf(917));
/* 316 */     addToMap("Zeta", Integer.valueOf(918));
/* 317 */     addToMap("Eta", Integer.valueOf(919));
/* 318 */     addToMap("Theta", Integer.valueOf(920));
/* 319 */     addToMap("Iota", Integer.valueOf(921));
/* 320 */     addToMap("Kappa", Integer.valueOf(922));
/* 321 */     addToMap("Lambda", Integer.valueOf(923));
/* 322 */     addToMap("Mu", Integer.valueOf(924));
/* 323 */     addToMap("Nu", Integer.valueOf(925));
/* 324 */     addToMap("Xi", Integer.valueOf(926));
/* 325 */     addToMap("Omicron", Integer.valueOf(927));
/* 326 */     addToMap("Pi", Integer.valueOf(928));
/* 327 */     addToMap("Rho", Integer.valueOf(929));
/* 328 */     addToMap("Sigma", Integer.valueOf(931));
/* 329 */     addToMap("Tau", Integer.valueOf(932));
/* 330 */     addToMap("Upsilon", Integer.valueOf(933));
/* 331 */     addToMap("Phi", Integer.valueOf(934));
/* 332 */     addToMap("Chi", Integer.valueOf(935));
/* 333 */     addToMap("Psi", Integer.valueOf(936));
/* 334 */     addToMap("Omega", Integer.valueOf(937));
/* 335 */     addToMap("alpha", Integer.valueOf(945));
/* 336 */     addToMap("beta", Integer.valueOf(946));
/* 337 */     addToMap("gamma", Integer.valueOf(947));
/* 338 */     addToMap("delta", Integer.valueOf(948));
/* 339 */     addToMap("epsilon", Integer.valueOf(949));
/* 340 */     addToMap("zeta", Integer.valueOf(950));
/* 341 */     addToMap("eta", Integer.valueOf(951));
/* 342 */     addToMap("theta", Integer.valueOf(952));
/* 343 */     addToMap("iota", Integer.valueOf(953));
/* 344 */     addToMap("kappa", Integer.valueOf(954));
/* 345 */     addToMap("lambda", Integer.valueOf(955));
/* 346 */     addToMap("mu", Integer.valueOf(956));
/* 347 */     addToMap("nu", Integer.valueOf(957));
/* 348 */     addToMap("xi", Integer.valueOf(958));
/* 349 */     addToMap("omicron", Integer.valueOf(959));
/* 350 */     addToMap("pi", Integer.valueOf(960));
/* 351 */     addToMap("rho", Integer.valueOf(961));
/* 352 */     addToMap("sigmaf", Integer.valueOf(962));
/* 353 */     addToMap("sigma", Integer.valueOf(963));
/* 354 */     addToMap("tau", Integer.valueOf(964));
/* 355 */     addToMap("upsilon", Integer.valueOf(965));
/* 356 */     addToMap("phi", Integer.valueOf(966));
/* 357 */     addToMap("chi", Integer.valueOf(967));
/* 358 */     addToMap("psi", Integer.valueOf(968));
/* 359 */     addToMap("omega", Integer.valueOf(969));
/* 360 */     addToMap("thetasym", Integer.valueOf(977));
/* 361 */     addToMap("upsih", Integer.valueOf(978));
/* 362 */     addToMap("piv", Integer.valueOf(982));
/* 363 */     addToMap("bull", Integer.valueOf(8226));
/* 364 */     addToMap("hellip", Integer.valueOf(8230));
/* 365 */     addToMap("prime", Integer.valueOf(8242));
/* 366 */     addToMap("Prime", Integer.valueOf(8243));
/* 367 */     addToMap("oline", Integer.valueOf(8254));
/* 368 */     addToMap("frasl", Integer.valueOf(8260));
/* 369 */     addToMap("weierp", Integer.valueOf(8472));
/* 370 */     addToMap("image", Integer.valueOf(8465));
/* 371 */     addToMap("real", Integer.valueOf(8476));
/* 372 */     addToMap("trade", Integer.valueOf(8482));
/* 373 */     addToMap("alefsym", Integer.valueOf(8501));
/* 374 */     addToMap("larr", Integer.valueOf(8592));
/* 375 */     addToMap("uarr", Integer.valueOf(8593));
/* 376 */     addToMap("rarr", Integer.valueOf(8594));
/* 377 */     addToMap("darr", Integer.valueOf(8595));
/* 378 */     addToMap("harr", Integer.valueOf(8596));
/* 379 */     addToMap("crarr", Integer.valueOf(8629));
/* 380 */     addToMap("lArr", Integer.valueOf(8656));
/* 381 */     addToMap("uArr", Integer.valueOf(8657));
/* 382 */     addToMap("rArr", Integer.valueOf(8658));
/* 383 */     addToMap("dArr", Integer.valueOf(8659));
/* 384 */     addToMap("hArr", Integer.valueOf(8660));
/* 385 */     addToMap("forall", Integer.valueOf(8704));
/* 386 */     addToMap("part", Integer.valueOf(8706));
/* 387 */     addToMap("exist", Integer.valueOf(8707));
/* 388 */     addToMap("empty", Integer.valueOf(8709));
/* 389 */     addToMap("nabla", Integer.valueOf(8711));
/* 390 */     addToMap("isin", Integer.valueOf(8712));
/* 391 */     addToMap("notin", Integer.valueOf(8713));
/* 392 */     addToMap("ni", Integer.valueOf(8715));
/* 393 */     addToMap("prod", Integer.valueOf(8719));
/* 394 */     addToMap("sum", Integer.valueOf(8721));
/* 395 */     addToMap("minus", Integer.valueOf(8722));
/* 396 */     addToMap("lowast", Integer.valueOf(8727));
/* 397 */     addToMap("radic", Integer.valueOf(8730));
/* 398 */     addToMap("prop", Integer.valueOf(8733));
/* 399 */     addToMap("infin", Integer.valueOf(8734));
/* 400 */     addToMap("ang", Integer.valueOf(8736));
/* 401 */     addToMap("and", Integer.valueOf(8743));
/* 402 */     addToMap("or", Integer.valueOf(8744));
/* 403 */     addToMap("cap", Integer.valueOf(8745));
/* 404 */     addToMap("cup", Integer.valueOf(8746));
/* 405 */     addToMap("int", Integer.valueOf(8747));
/* 406 */     addToMap("there4", Integer.valueOf(8756));
/* 407 */     addToMap("sim", Integer.valueOf(8764));
/* 408 */     addToMap("cong", Integer.valueOf(8773));
/* 409 */     addToMap("asymp", Integer.valueOf(8776));
/* 410 */     addToMap("ne", Integer.valueOf(8800));
/* 411 */     addToMap("equiv", Integer.valueOf(8801));
/* 412 */     addToMap("le", Integer.valueOf(8804));
/* 413 */     addToMap("ge", Integer.valueOf(8805));
/* 414 */     addToMap("sub", Integer.valueOf(8834));
/* 415 */     addToMap("sup", Integer.valueOf(8835));
/* 416 */     addToMap("nsub", Integer.valueOf(8836));
/* 417 */     addToMap("sube", Integer.valueOf(8838));
/* 418 */     addToMap("supe", Integer.valueOf(8839));
/* 419 */     addToMap("oplus", Integer.valueOf(8853));
/* 420 */     addToMap("otimes", Integer.valueOf(8855));
/* 421 */     addToMap("perp", Integer.valueOf(8869));
/* 422 */     addToMap("sdot", Integer.valueOf(8901));
/* 423 */     addToMap("lceil", Integer.valueOf(8968));
/* 424 */     addToMap("rceil", Integer.valueOf(8969));
/* 425 */     addToMap("lfloor", Integer.valueOf(8970));
/* 426 */     addToMap("rfloor", Integer.valueOf(8971));
/* 427 */     addToMap("lang", Integer.valueOf(9001));
/* 428 */     addToMap("rang", Integer.valueOf(9002));
/* 429 */     addToMap("loz", Integer.valueOf(9674));
/* 430 */     addToMap("spades", Integer.valueOf(9824));
/* 431 */     addToMap("clubs", Integer.valueOf(9827));
/* 432 */     addToMap("hearts", Integer.valueOf(9829));
/* 433 */     addToMap("diams", Integer.valueOf(9830));
/*     */   }
/*     */   
/*     */   public static void main(String[] argv) {
/* 437 */     test("abc&nbsp;def&nbsp;&nbsp;ghi&nbsp;&foo;&#1234;zug");
/* 438 */     test("abc&nbsp;def&#z231;&#9999999999;&#99999;&1321asdd;&nbsp;&nbsp;ghi&nbsp;&foo;&le;&sube;&#1234;zug&or;");
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/html/HtmlEntityMapper.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */